import menuMapper from "../../mappers/user/menuMapper.js";

/**
 * @description 创建菜单
 * @param {Object} menuData - 菜单数据
 * @returns {Promise<string|null>} 返回错误信息或 null
 */
const createMenu = async (menuData) => {
    const existingMenu = await menuMapper.existingMenu(menuData);

    if (existingMenu.length > 0) {
        return '菜单名已存在';
    }

    await menuMapper.createMenu(menuData);

    return null;
};

/**
 * @description 获取所有菜单
 * @returns {Promise<Array>} 返回菜单列表
 */
const getAllMenus = async () => {
    return await menuMapper.getAllMenus();
};

/**
 * @description 批量更新菜单
 * @param {Array<{menuId: number, menuData: Object}>} menus - 菜单更新数据
 * @returns {Promise<null|string>} 返回 null 或错误信息
 */
const updateMenu = async (menus) => {
    const updatePromises = menus.map(async ({menuId, menuData}) => {
        // 确保 menuId 和 menuData 存在
        if (!menuId || !menuData) {
            return '菜单 ID 或更新数据缺失';
        }
        return await menuMapper.updateMenu(menuId, menuData); // 调用更新函数
    });

    // 执行所有更新并捕获错误
    const results = await Promise.all(updatePromises);
    const error = results.find(result => result !== null);

    return error || null; // 返回第一个错误或 null
};


/**
 * @description 逻辑删除菜单
 * @param {number} menuId - 菜单 ID
 * @returns {Promise<null>} 返回 null
 */
const deleteMenu = async (menuId) => {
    await menuMapper.deleteMenu(menuId);
    return null;
};

// 导出菜单管理功能
export default {createMenu, getAllMenus, updateMenu, deleteMenu};
